package com.deer.wms.ware.task.service;

import com.deer.wms.intercept.common.data.CurrentUser;
import com.deer.wms.inventory.model.Inventory.Inventory;
import com.deer.wms.project.root.service.SuperService;
import com.deer.wms.ware.task.model.Wave.WaveDetail;
import com.deer.wms.ware.task.model.pickTask.PickTask;
import com.deer.wms.ware.task.model.pickTask.PickTaskCriteria;
import com.deer.wms.ware.task.model.pickTask.PickTaskDto;
import com.deer.wms.ware.task.model.pickTask.SeedingWallAlertInfo;

import java.util.List;


/**
 *
 * @author guo
 * @since 2020/02/02
 */
public interface PickTaskService extends SuperService<PickTask> {
    List<PickTaskDto> findList(PickTaskCriteria criteria);
    List<PickTaskDto> findByBillNo(PickTaskCriteria criteria);
    List<PickTaskDto> findByWaveMasterId(PickTaskCriteria criteria);
    List<PickTaskDto> allotTask(PickTaskCriteria criteria);

    /**
     * 定时任务 创建拣货任务
     */
    void createPickTask(Integer soType);

    /**
     * 为波次明细分配拣货任务
     * @param waveDetailList 波次明细
     * @param currentUser 当前用户
     */
    void createPickTask(List<WaveDetail> waveDetailList, CurrentUser currentUser);

    /**
     * 通过出库任务明细查询其关联的拣货任务
     * @param soDetailId so明细id
     * @return List<PickTaskVo>
     */
    List<PickTask> findBySoDetailId(Integer soDetailId);

    List<PickTaskDto> findFirst(PickTaskCriteria criteria);

    /**
     * 生成越库的拣货任务
     * @param inventory 库存
     * @param acceptRecordId 验收单ID
     */
    void createBaoKuanPickTask(Inventory inventory,Integer acceptRecordId);

    /**
     * 根据SO单查询  按单出库
     * @param soNo SO编号
     * @return List<PickTaskDto>
     */
    List<PickTaskDto> findBySo(String soNo);

    /**
     * 通过波次ID查询关联的拣货任务
     * @param waveId 波次ID
     * @return List<PickTaskDto>
     */
    List<PickTaskDto> findByWave(Integer waveId);

    List<SeedingWallAlertInfo> getSeedingWallAlertInfo(PickTaskCriteria criteria);

    List<PickTaskDto> getChildTasksByParentId(Integer parentId);

    PickTaskDto getTaskById( Integer taskId);

    List<PickTask> findBySoMasterId(Integer soMaterId);

    /**
     * 拣货确认
     * @param pickTask 拣货任务
     * @param currentUser 当前用户
     */
    void commitPick(PickTask pickTask, CurrentUser currentUser);

}
